# -*- coding : utf-8 -*-




import csv
import tqdm
import json
import random
import pymysql

from data_generate import utils
from openpyxl import load_workbook, Workbook


intent_list = ['用户主动询问:保险类型', '用户主动表示:在忙-预约回访', '用户主动表示:三次不需要', '用户主动询问:理赔流程',
                   '用户主动表示:有人联系过我', '用户主动询问:什么时间联系', '用户主动询问:保费问题', '用户主动表示:我没有买过',
                   '用户主动表示:客户要求转人工', '用户主动询问:要钱就不要了', '用户主动询问:报销比例', '用户主动询问:保障问题',
                   '用户主动表示:怀疑号码', '用户主动表示:不需要-无原因', '用户主动询问:住院都能报吗', '用户主动询问:断缴问题',
                   '用户主动询问:医保问题', '用户主动询问:不可理赔条件', '用户主动询问:担心自己被扣费', '用户主动表示:非本人接听',
                   '用户主动询问:是否收费', '用户主动表示:同业', '用户主动询问:续保费用', '用户主动表示:挂断后操作',
                   '用户主动询问:是人还是机器人', '用户主动表示:没有网络', '用户主动表示:已经买过该产品', '用户主动询问:是否返本',
                   '用户主动询问:投保条件', '用户主动表示:我有医社保了', '用户主动表示:不愿意点链接', '用户主动表示:在忙-可协商',
                   '用户主动询问:确认是否承保', '用户主动询问:什么医疗保障', '用户主动表示:不需要-暂时/先', '用户主动表示:发短信',
                   '用户主动询问:询问工号', '用户主动表示:已有其他商业保险', '用户主动表示:停一下，听我说', '用户主动询问:有没有风险',
                   '用户主动询问:这是一个什么样的保险', '用户主动表示:我去其他渠道买', '用户主动询问:保障额度', '用户主动表示:来源点错了',
                   '用户主动询问:公众号问题', '用户主动询问:你是在卖保险吗', '用户主动询问:是否可以为家人投保', '用户主动询问:办理是否要体检',
                   '用户主动询问:关于免赔额', '用户主动表示:在忙-必须挂机', '用户主动询问:售后问题', '用户主动表示:加微信',
                   '用户主动询问:联系方式', '用户主动询问:是否属于商业保险', '用户主动询问:保障时效到期', '用户主动询问:你们怎么还卖保险',
                   '用户主动表示:在忙-快点说', '用户主动询问:是否与现有保险冲突', '用户主动询问:你怎么有我号码', '用户主动询问:投保有什么好处',
                   '用户主动表示:没钱', '用户主动表示:操作问题-操作麻烦', '用户主动表示:投诉', '用户主动表示:三次在忙', '用户主动询问:买保险的意义',
                   '用户主动询问:办理方式', '用户主动询问:发票问题', '用户主动询问:哪些医院可以报销', '用户主动询问:重大疾病都有哪些',
                   '用户主动询问:操作问题-操作目的', '用户主动表示:没收到短信', '用户主动表示:对保险有了解', '用户主动询问:赠险相关问题',
                   '用户主动询问:是否进口药都可以报销', '用户主动询问:打电话的目的', '用户主动询问:报销信息', '用户主动询问:可理赔条件',
                   '用户主动表示:没听懂', '用户主动表示:年龄不符', '用户主动询问:理赔问题', '用户主动询问:操作问题-不会操作',
                   '用户主动询问:退款问题', '用户主动询问:需要连续续保', '用户主动表示:挂断后操作轮询', '用户主动询问:等待期',
                   '用户主动询问:询问绿通', '用户主动表示:智能语音客服', '用户主动表示:重说', '用户主动询问:公司在哪', '用户主动询问:关于活动',
                   '用户主动表示:有需要再联系', '用户主动询问:缴费问题', '用户主动询问:生效日期',
                   '用户主动表示:非本人', '用户主动询问:保障时效', '用户主动表示:短信点不开', '用户主动表示:二次不需要',
                   '用户主动表示:语音信箱', '用户主动询问:什么是百万医疗、自费药', '用户主动询问:什么产品', '用户主动询问:确认平台',
                   '用户主动表示:客户会考虑', '用户主动表示:暂时不想操作', '用户主动询问:医疗垫付问题', '用户主动询问:都有什么保障',
                   '用户主动询问:以前有疾病现在好了，能买吗', '用户主动询问:什么平台', '用户主动询问:你是谁', '用户主动表示:在操作',
                   '用户主动询问:保费缴存周期', '用户主动表示:我买不了保险', '用户主动询问:理赔标准', '用户主动表示:已经取消了',
                   '用户主动询问:产品属性', '用户主动表示:强烈拒绝', '用户主动询问:是否全国内都保', '用户主动询问:赔过以后还能续保吗',
                   '用户主动询问:第2个月保费', '用户主动询问:哪家公司承保', '用户主动询问:如何查询保单', '用户主动表示:无意向调侃',
               '用户主动表示:续期交过了', '用户主动表示:疑难问题', '用户主动表示:反驳营销介绍', '用户主动表示:拒绝福利',
               '用户主动表示:已经关注公众号', '用户主动表示:希望从头引导操作', '用户主动表示:关于电话医生', '用户主动表示:关于体检卡',
               '用户主动表示:不用微信', '用户主动表示:没找到黄色服务通知', '用户主动询问:什么专享特权', '用户主动询问:什么是活跃度分数']

intent_name_dict = dict()
for intent in intent_list:
    if intent.split(':')[-1] not in intent_name_dict:
        intent_name_dict[intent.split(':')[-1]] = intent


def intent_meaning(file_path):

    wb = load_workbook(file_path)
    ws = wb[wb.sheetnames[0]]


    # 意图含义
    intent_meaning_data = list()
    for i, row in tqdm.tqdm(enumerate(ws.values)):
        if i != 0:
            intent_name = row[2]
            intent_meaning = row[4]

            if intent_name and intent_meaning:
                intent_name = intent_name.replace('用户主动表示:', '').replace('用户主动询问:', '')
                intent_meaning_data.append({
                    'instruction': '以下意图的定义是什么',
                    'input': intent_name,
                    'output': intent_meaning,
                })

    utils.jdump(intent_meaning_data, "./data/lingxi_intent_meaning.json")


def intent_answer(file_path):

    wb = load_workbook(file_path)
    ws = wb[wb.sheetnames[0]]

    for i, row in tqdm.tqdm(enumerate(ws.values)):
        if i != 0 :
            intent_name = row[0]
            answer = row[1]



def intent_multi(file_path):


    wb = load_workbook(file_path)
    ws = wb[wb.sheetnames[0]]

    # 存储知识库语料
    intent_list = list()
    for i, row in tqdm.tqdm(enumerate(ws.values)):
        if i != 0:
            intent_name = row[1].replace('用户主动表示:', '').replace('用户主动询问:', '')
            query = row[2]

            intent_list.append('{}:{}'.format(intent_name, query))

    # 生成训练数据
    intent_data = list()
    for intent_name_query in tqdm.tqdm(intent_list):
        # 每个query随机筛选两个query组成3个query
        intent_name_querys = random.sample(intent_list, 2)
        intent_name_querys.append(intent_name_query)

        intent_name_list = list()
        query_list = list()
        for intent_name_query in intent_name_querys:
            intent_name, query = intent_name_query.split(':')
            query_list.append(query)
            intent_name_list.append(intent_name)


        intent_data.append({
            'instruction': '在一个销售保险的对话场景中，分别判断以下语句的意图标签',
            'input': '\n'.join(query_list),
            'output': '\n'.join(intent_name_list),
        })
    utils.jdump(intent_data, "./data/lingxi_intent_multi.json")



def intent_single(file_path):

    wb = load_workbook(file_path)
    ws = wb[wb.sheetnames[0]]

    # 存储知识库语料
    intent_dict = dict()

    for i, row in tqdm.tqdm(enumerate(ws.values)):
        if i != 0:
            intent_name = row[1].replace('用户主动表示:', '').replace('用户主动询问:', '')
            query = row[2]

            if intent_name not in intent_dict:
                intent_dict[intent_name] = list()

            intent_dict[intent_name].append(query)


    # 生成训练数据
    intent_data = list()
    for intent_name in tqdm.tqdm(intent_dict):
        if intent_name in ['无态度', '肯定态度', '否定态度']:
            continue

        for query in tqdm.tqdm(intent_dict[intent_name]):


            intent_data.append({
                'instruction': '在一个销售保险的对话场景中，给以下语句的意图标签',
                'input': query,
                'output': intent_name_dict[intent_name] if intent_name != 'NOINTENT' else 'NOINTENT',
            })

    utils.jdump(intent_data, "./data/lingxi_intent_single.json")



def intent_train(file_path, intent_file_path):

    fp = open(file_path, 'r', encoding='utf-8')
    reader = csv.reader(fp)

    wb = load_workbook(intent_file_path)
    ws = wb[wb.sheetnames[0]]
    query_dict = dict()
    for i, row in tqdm.tqdm(enumerate(ws.values)):
        if i != 0:
            intent = row[1]
            query = row[2]
            query_dict[query] = intent

    intent_data = list()
    for line in reader:
        # print( line[0].split('\t')[1], line[0].split('\t')[2] )
        try:
            intent_data.append({
                'instruction': '在一个销售保险的对话场景中，分别判断以下语句的意图标签',
                'input': '\n'.join([line[0].split('\t')[1], line[0].split('\t')[2]]),
                'output': intent_name_dict[query_dict[line[0].split('\t')[1]]]
                          + '\n' +
                          intent_name_dict[query_dict[line[0].split('\t')[2]]]
            })
        except Exception as err:
            pass

    utils.jdump(intent_data, "./data/lingxi_intent_multi.json")



def get_intent_name():
    connection = pymysql.connect(
        # host="39.103.215.119",
        # host="am-8vbwn20384jdq3vq185480.zhangbei.ads.aliyuncs.com",  # 内网
        host="am-8vbwn20384jdq3vq185480o.zhangbei.ads.aliyuncs.com",  # 公网
        # port=3308,
        port=3306,
        user="ds_user",
        passwd="Moxi123#",
        # db="data_center_temp",
        charset='utf8mb4',
        cursorclass=pymysql.cursors.DictCursor
    )
    cursor = connection.cursor()

    sql = '''
    select dm_session_id, full_name, sex, tags  
    from tds_data_center_temp.result_tags_dialogue_round 
    where company_id = 2199 
    and call_start_time >= "2023-03-01 00:00:00" 
    and call_start_time <= "2023-04-30 09:59:59" 
    and call_status in ("normalConnection", "transferFail") 
    and tags is not NULL
    
    '''

    cursor.execute(sql)
    results = cursor.fetchall()

    intent_set = set()
    for result in tqdm.tqdm(results):
        for tag in result['tags'].split(','):
            if tag.startswith('用户主动'):
                intent_set.add(tag)

    print( list(intent_set) )


def task(file_path):

    en_data_list = list()
    zh_data_list = list()
    num = 0
    with open(file_path, 'r') as fp:
        for line in tqdm.tqdm(fp.readlines()):
            # print(line[:-1])
            try:
                data = eval(('{'+line[:-1].split('{')[-1]))
                en_data_list.append({
                    'instruction': data['textbox_q_instruction'] + '\n' +
                                   data['textbox_q_context'] if isinstance(data['textbox_q_context'], str) else '',
                    'input':  data['textbox_question'],
                    'output': '答案:' + data['textbox_answer'] + '\n' +
                              data['textbox_answer_analysis'] if isinstance(data['textbox_answer_analysis'], str) else '',
                })
            except Exception as err:
                num += 1

    print(num)
    utils.jdump(en_data_list, "./data/exam_instructions.json")



if __name__ == '__main__':


    get_intent_name()

